package com.hmy.common.platform;

import com.hmy.common.contants.CcpConstants;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Properties;

/**
 * 
 * <pre>
 * <一句话功能简述>
 * 系统服务启动之前的初始化公共类
 * <功能详细描述>
 * </pre>
 * 
 * @author xiongwei
 * @version [版本号, 2017年8月17日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class CcpInitService
{
    
    /* ======================================================================== */
    /* * * * * * * * * * * * * * * Public Fields (公共属性) * * * * * * * * * */
    /* ======================================================================== */
    
    /* ======================================================================== */
    /*
     * * * * * * * * * * * * * * * Private Fields (私有属性) * * * * * * * * * / /*
     * ========================================================================
     */
    
    private static CcpInitService ccpInitService = new CcpInitService();
    
    /** 根路径 */
    private final String ROOT_PATH_KEY = "ROOT_PATH";
    
    /** 日志根路径 */
    private final String LOGGER_ROOT_PATH_KEY = "LOGGER_ROOT_PATH";
    
    /** 项目名称 */
    private final String PROJECT_NAME_KEY = "PROJECT_NAME";
    
    /* ======================================================================== */
    /*
     * * * * * * * * * * * * * * * Construct Methods (构造方法) * * * * * * * / /*
     * ========================================================================
     */
    
    /* ======================================================================== */
    /*
     * * * * * * * * * * * * * * * Public Methods (公有方法) * * * * * * * * * / /*
     * ========================================================================
     */
    
    /**
     * 
     * <pre>
     * <一句话功能简述>
     * 单例
     * <功能详细描述>
     * </pre>
     * 
     * @author 姓名 工号
     * @version [版本号, 2017年8月17日]
     * @return CcpInitService
     * @see [类、类#方法、类#成员]
     */
    public static CcpInitService getInstance()
    {
        return ccpInitService;
    }
    
    /**
     * 
     * <pre>
     * <一句话功能简述>
     * 获取当前服务根路径
     * <功能详细描述>
     * </pre>
     * 
     * @author 姓名 工号
     * @version [版本号, 2017年8月17日]
     * @return String
     * @see [类、类#方法、类#成员]
     */
    public String getRootPath()
    {
        return System.getProperty(ROOT_PATH_KEY);
    }
    
    /**
     * 
     * <pre>
     * <一句话功能简述>
     * 获取当前项目名称
     * <功能详细描述>
     * </pre>
     * 
     * @author 姓名 工号
     * @version [版本号, 2017年8月17日]
     * @return String
     * @see [类、类#方法、类#成员]
     */
    public String getProjectName()
    {
        return System.getProperty(PROJECT_NAME_KEY);
    }
    
    /**
     * 
     * <pre>
     * <一句话功能简述>
     * 获取当前项目名称
     * <功能详细描述>
     * </pre>
     * 
     * @author 姓名 工号
     * @version [版本号, 2017年8月17日]
     * @return String
     * @see [类、类#方法、类#成员]
     */
    public String getConfigPath()
    {
        return getRootPath()+ File.separator + getProjectName()+ "/config";
    }
    
    /**
     * 
     * <pre>
     * <一句话功能简述>
     * 设置系统级环境参数
     * <功能详细描述>
     * 根据main里面的参数，设置改系统的环境参数
     * </pre>
     * 
     * @author 姓名 工号
     * @version [版本号, 2017年8月17日]
     * @param params main方法的参数
     * @see [类、类#方法、类#成员]
     */
    public void setSystemProperty(String[] params)
    {
        // 项目根路径
        String rootPath = params[0];
        
        // 日志根路径
        String loggerRootPath = params[1];
        
        // 项目名称
        String projectName = params[2];
        
        // 设置根路径
        System.setProperty(ROOT_PATH_KEY, rootPath);
        
        // 设置日志根路径
        System.setProperty(LOGGER_ROOT_PATH_KEY, loggerRootPath);
        
        // 设置项目名称
        System.setProperty(PROJECT_NAME_KEY, projectName);
        
    }
    

    /* ======================================================================== */
    /*
     * * * * * * * * * * * * * * * Private Methods (私有方法) * * * * * ** * * / /*
     * ========================================================================
     */
    
    /**
     * 
     * <pre>
     * <一句话功能简述>
     * 获取配置文件
     * <功能详细描述>
     * </pre>
     * 
     * @author 姓名 工号
     * @version [版本号, 2017年8月17日]
     * @param path 文件路径
     * @return Properties
     * @throws Exception
     * @see [类、类#方法、类#成员]
     */
    private Properties getProperties(String path)
        throws Exception
    {
        // 加载配置文件
        Properties properties = new Properties();
        File file = new File(path);
        properties.load(new InputStreamReader(new FileInputStream(file), CcpConstants.CHARSET_UTF_8));
        
        return properties;
    }
}
